www.gusucode.com > VC++ 小型会员积分管理系统-源码程序 > VC++ 小型会员积分管理系统-源码程序/code/AcPtsRecorder/AcPtsRecorderView.cpp

    //Download by http://www.NewXing.com
// AcPtsRecorderView.cpp : CAcPtsRecorderView 类的实现
//

#include "stdafx.h"
#include "AcPtsRecorder.h"
#include <stdlib.h>
#include "AcPtsRecorderDoc.h"
#include "AcPtsRecorderView.h"
#include "DlgLogin.h"
#include "DlgAddVIP.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAcPtsRecorderView

IMPLEMENT_DYNCREATE(CAcPtsRecorderView, CFormView)

BEGIN_MESSAGE_MAP(CAcPtsRecorderView, CFormView)
	ON_BN_CLICKED(IDC_BUTTON_FIRSTPAGE, &CAcPtsRecorderView::OnBnClickedButtonFirstpage)
	ON_BN_CLICKED(IDC_BUTTON_FIRST, &CAcPtsRecorderView::OnBnClickedButtonPre)
	ON_BN_CLICKED(IDC_BUTTON_SERCH, &CAcPtsRecorderView::OnBnClickedButtonSerch)
	ON_BN_CLICKED(IDC_BUTTON_LAST, &CAcPtsRecorderView::OnBnClickedButtonLast)
	ON_BN_CLICKED(IDC_BUTTON_NEXT, &CAcPtsRecorderView::OnBnClickedButtonNext)
	ON_NOTIFY(NM_CLICK, IDC_LIST_CUSMINFO, &CAcPtsRecorderView::OnNMClickListCusminfo)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_CUSMINFO, &CAcPtsRecorderView::OnNMDblclkListCusminfo)
	ON_BN_CLICKED(IDC_CHECK_DATE, &CAcPtsRecorderView::OnBnClickedCheckDate)
	ON_COMMAND(ID_VIP_NEW, &CAcPtsRecorderView::OnVipNew)
	ON_NOTIFY(NM_RCLICK, IDC_LIST_CUSMINFO, &CAcPtsRecorderView::OnNMRclickListCusminfo)
	ON_COMMAND(ID_UPDATE_DATA, &CAcPtsRecorderView::OnUpdateData)
	ON_COMMAND(ID_DEL_DATA, &CAcPtsRecorderView::OnDelData)
END_MESSAGE_MAP()

// CAcPtsRecorderView 构造/析构

CAcPtsRecorderView::CAcPtsRecorderView()
	: CFormView(CAcPtsRecorderView::IDD)
	, m_strSerch(_T(""))
	, m_bSerchWithDate(FALSE)
	, m_tmStart(COleDateTime::GetCurrentTime())
	, m_tmEnd(COleDateTime::GetCurrentTime())
	,m_strWhere("")
	,m_nDataPerPage(20)
	,m_nDataStart(0)
	,m_nDataEnd(0)
	,m_nDataCount(0)
	,m_nCurPage(1)
	,m_nPageCount(0)
	,m_bNewSerch(TRUE)
{
	// TODO: 在此处添加构造代码



}

CAcPtsRecorderView::~CAcPtsRecorderView()
{
}

void CAcPtsRecorderView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_CUSMINFO, m_ctlListEx);
	DDX_Text(pDX, IDC_EDIT_STRING, m_strSerch);
	DDX_Check(pDX, IDC_CHECK_DATE, m_bSerchWithDate);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_START, m_tmStart);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_END, m_tmEnd);
}

BOOL CAcPtsRecorderView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	return CFormView::PreCreateWindow(cs);
}

void CAcPtsRecorderView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
	
	m_ctlListEx.InsertColumn(0, _T("编号"), LVCFMT_LEFT, 40);
	m_ctlListEx.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100);
	m_ctlListEx.InsertColumn(2, _T("卡号"), LVCFMT_LEFT, 100);
	m_ctlListEx.InsertColumn(3, _T("性别"), LVCFMT_LEFT, 40);
	m_ctlListEx.InsertColumn(4, _T("年龄"), LVCFMT_LEFT, 40);
	m_ctlListEx.InsertColumn(5, _T("当前积分"), LVCFMT_LEFT, 100);
	m_ctlListEx.InsertColumn(6, _T("创建时间"), LVCFMT_LEFT, 150);
	m_ctlListEx.InsertColumn(7, _T("上次更新时间"), LVCFMT_LEFT, 200);

	DWORD dwStyle = m_ctlListEx.GetStyle();
	m_ctlListEx.ModifyStyleEx(0, WS_EX_CLIENTEDGE);
	dwStyle = m_ctlListEx.GetStyle();
	dwStyle = m_ctlListEx.GetExtendedStyle();
	m_ctlListEx.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_INFOTIP);
	dwStyle = m_ctlListEx.GetExtendedStyle();

// 	m_ctlListEx.SetBkColor(RGB(188,194,212));
// 	m_ctlListEx.SetTextBkColor(RGB(188,194,212));
// 
// 	m_ctlListEx.SetBkColor(RGB(224,226,255));
// 	m_ctlListEx.SetTextBkColor(RGB(224,226,255));
// 	m_ctlListEx.SetTextColor(RGB(0,255,0));
	((CComboBox*)GetDlgItem(IDC_COMBO_SERCHTYPE))->SetCurSel(1);

	OnBnClickedButtonFirstpage();
}


// CAcPtsRecorderView 诊断

#ifdef _DEBUG
void CAcPtsRecorderView::AssertValid() const
{
	CFormView::AssertValid();
}

void CAcPtsRecorderView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CAcPtsRecorderDoc* CAcPtsRecorderView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAcPtsRecorderDoc)));
	return (CAcPtsRecorderDoc*)m_pDocument;
}
#endif //_DEBUG


// CAcPtsRecorderView 消息处理程序
void CAcPtsRecorderView::OnBnClickedButtonSerch()
{
	UpdateData();
	CString strWhere;
	if (((CComboBox*)GetDlgItem(IDC_COMBO_SERCHTYPE))->GetCurSel() == 0)
		strWhere.Format("card_id like '%%%s%%'", m_strSerch);
	else if (((CComboBox*)GetDlgItem(IDC_COMBO_SERCHTYPE))->GetCurSel() == 1)
		strWhere.Format("customer_name like '%%%s%%'", m_strSerch);
	m_strWhere = strWhere;
	m_bNewSerch = TRUE;
	OnBnClickedButtonFirstpage();
}

void CAcPtsRecorderView::OnBnClickedButtonFirstpage()
{
	m_nCurPage = 1;
	CString strWhere;
	if (m_strWhere.IsEmpty())
		strWhere.Format("1=1 order by customer_id desc");
	else
		strWhere.Format("%s order by  customer_id desc", m_strWhere);
	UpdateListData(strWhere);
}

void CAcPtsRecorderView::OnBnClickedButtonPre()
{
	m_nCurPage --;
	CString strWhere;
	if (m_strWhere.IsEmpty())
		strWhere.Format("customer_id <= %d order by customer_id desc", m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
	else
		strWhere.Format("%s and  customer_id<=%d   order by customer_id desc",m_strWhere, m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
	UpdateListData(strWhere);
}

void CAcPtsRecorderView::OnBnClickedButtonNext()
{
	m_nCurPage ++;
	CString strWhere;
	if (m_strWhere.IsEmpty())
		strWhere.Format("customer_id <= %d  order by customer_id desc", m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
	else
		strWhere.Format("%s and customer_id <= %d  order by customer_id desc",m_strWhere, m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
	UpdateListData(strWhere);
}


void CAcPtsRecorderView::OnBnClickedButtonLast()
{
	m_nCurPage = m_nPageCount;
	CString strWhere;
	if (m_strWhere.IsEmpty())
		strWhere.Format("customer_id >= %d and customer_id <= %d order by customer_id desc", m_nDataEnd,  m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
	else
		strWhere.Format("%s  and customer_id >= %d and customer_id <= %d order by customer_id desc", m_strWhere, m_nDataEnd, m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
	UpdateListData(strWhere);
}

void CAcPtsRecorderView::OnNMClickListCusminfo(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码

	*pResult = 0;
}

void CAcPtsRecorderView::OnNMRclickListCusminfo(NMHDR *pNMHDR, LRESULT *pResult)
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;


	LPNMITEMACTIVATE pNMITEMACTIVATE = (LPNMITEMACTIVATE)pNMHDR;

	if (pNMITEMACTIVATE->uNewState==0 && pNMITEMACTIVATE->iItem>=0)
	{
		m_nCurSel = pNMITEMACTIVATE->iItem;
		CPoint point = pNMITEMACTIVATE->ptAction;
		CRect rect;
		m_ctlListEx.GetClientRect(rect);
		m_ctlListEx.ClientToScreen(rect);

		CPoint p = rect.TopLeft();
		point = p + point;

		CMenu menu;	

		menu.LoadMenu(IDR_MENU_POP);
		CMenu* pPopup = NULL;

		pPopup = menu.GetSubMenu(0);
		// 		pPopup->RemoveMenu(ID_POP_OPEN_REPORT,MF_BYCOMMAND);
		// 		pPopup->RemoveMenu(ID_POP_DOWN_REPORT,MF_BYCOMMAND);
		// 		pPopup->RemoveMenu(ID_POP_UP_ECGDATA,MF_BYCOMMAND);

		ASSERT(pPopup != NULL);	

		pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);

	}
	*pResult = 0;
}
void CAcPtsRecorderView::OnNMDblclkListCusminfo(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码

	POSITION pos =m_ctlListEx.GetFirstSelectedItemPosition();	
	if(pos)	
	{
		CDlgAddVIP dlg;
		CADORecordset rs;
		int nIndex  = m_ctlListEx.GetNextSelectedItem(pos);
		int nID = (int)m_ctlListEx.GetItemData(nIndex);
		CString strSql = "";
		strSql.Format("select * from customers where customer_id = %d", nID);
	
		if(rs.Open(theApp.m_ADODatabase.GetActiveConnection(), strSql))
		{
			if(!rs.IsEof())
			{
				rs.GetFieldValue("customer_id",		dlg.m_nVIPID);
				rs.GetFieldValue("customer_name",	dlg.m_strVIPName);
				rs.GetFieldValue("card_id",			dlg.m_strCardID);
				rs.GetFieldValue("sex",				dlg.m_strVIPSex);
				rs.GetFieldValue("age",				dlg.m_nVIPAge);
				rs.GetFieldValue("cur_point",		dlg.m_nVIPCurPoints);
				CString strCreatTime;
				rs.GetFieldValue("creat_time",		strCreatTime);	
				dlg.m_tmCreatTime.ParseDateTime(strCreatTime);
				dlg.m_bIsMod = TRUE;
				if (dlg.DoModal() == IDOK)
				{
					rs.Edit();
					rs.SetFieldValue("customer_name",	dlg.m_strVIPName);
					rs.SetFieldValue("card_id",			dlg.m_strCardID);
					rs.SetFieldValue("sex",				dlg.m_strVIPSex);
					rs.SetFieldValue("age",				dlg.m_nVIPAge);
					int npts = dlg.m_nVIPCurPoints + dlg.m_nVIPAddPoints;
					rs.SetFieldValue("cur_point",		npts);
					CString strNow;
					strNow.Format("%s", COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"));
					rs.SetFieldValue("update_time",		strNow);
					rs.Update();
					UpdateCustomerData();
				}
			}
		}
	}
	*pResult = 0;
}

void CAcPtsRecorderView::OnBnClickedCheckDate()
{
	UpdateData(TRUE);
	if (m_bSerchWithDate)
	{
		GetDlgItem(IDC_DATETIMEPICKER_START)->EnableWindow(TRUE);
		GetDlgItem(IDC_DATETIMEPICKER_END)->EnableWindow(TRUE);
	}
	else
	{
		GetDlgItem(IDC_DATETIMEPICKER_START)->EnableWindow(FALSE);
		GetDlgItem(IDC_DATETIMEPICKER_END)->EnableWindow(FALSE);
	}
}
void CAcPtsRecorderView::InsertVIP()
{
	CDlgAddVIP dlg;
	CADORecordset rs;
	CString strNow;
	strNow.Format("%s",COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"));
	CString strSQL = "select * from customers";
	dlg.m_bIsMod = FALSE;
	if (dlg.DoModal() == IDOK)
	{
		if(rs.Open(theApp.m_ADODatabase.GetActiveConnection(), strSQL))
		{
			rs.AddNew();
			rs.SetFieldValue("customer_name", dlg.m_strVIPName);
			rs.SetFieldValue("card_id", dlg.m_strCardID);
			rs.SetFieldValue("sex",  dlg.m_strVIPSex);
			rs.SetFieldValue("age", dlg.m_nVIPAge);
			rs.SetFieldValue("cur_point", dlg.m_nVIPCurPoints);
			rs.SetFieldValue("creat_time", strNow);			
			rs.SetFieldValue("update_time", strNow);
			rs.SetFieldValue("user_name",theApp.m_strCurUser);
			rs.Update();
		}
	}	
}
void CAcPtsRecorderView::OnVipNew()
{
	
	InsertVIP();
	CString strWhere = "";
	UpdateCustomerData();
	Invalidate();
}

void CAcPtsRecorderView::UpdateListData(CString strWhere)
{
	CADORecordset rs;
	long	nVIPID;
	CString	strVIPCardID;
	CString strVIPName;
	CString strCardID;
	CString strVIPSex;
	int		nVIPAge;
	int     nVIPCurPoints;
	CString strCreatTime;
	CString strUpdateTime;
	CString strCreateUser;

	//*新的一次查询  重新保存相应需要的值
	if (m_bNewSerch)
	{
		if (!m_ayPgStartEnd.IsEmpty())
		{
			m_ayPgStartEnd.RemoveAll();
		}
		m_nPageCount = 0;
		m_nDataCount = 0;
		CString strSql;
		strSql.Format("select * from customers where del_flag=0 and %s", strWhere);
		
		if(rs.Open(theApp.m_ADODatabase.GetActiveConnection(), strSql))
		{
			Pg_Start_End pg_start_end;
			if (!rs.IsEof())
			{
				rs.GetFieldValue("customer_id",	m_nDataStart);
				pg_start_end.nStart = m_nDataStart;
				m_nDataCount ++;
				m_nPageCount ++;

				while(!rs.IsEof())
				{
					rs.GetFieldValue("customer_id", m_nDataEnd);

					if (m_nDataCount++ > (m_nPageCount * m_nDataPerPage))
					{
						m_nPageCount++;
						pg_start_end.nEnd = m_nDataEnd;
						m_ayPgStartEnd.Add(pg_start_end);
						pg_start_end.nStart = m_nDataEnd;
					}
					rs.MoveNext();
				}
				pg_start_end.nEnd = m_nDataEnd;
				m_ayPgStartEnd.Add(pg_start_end);
			}
		}
		m_bNewSerch = FALSE;
	}
	
	
	CString strQuery;
	if (strWhere.IsEmpty())
		strQuery.Format("select top %d * from customers where del_flag=0", m_nDataPerPage);
	else
		strQuery.Format("select top %d * from customers where del_flag=0 and %s", m_nDataPerPage, strWhere);
	
	if (m_bSerchWithDate)
	{
		CString str;
		str.Format("  ('%s 00:00:00' < creat_time and creat_time < '%s 23:59:59')",\
			m_tmStart.Format("%Y-%m-%d"), m_tmEnd.Format("%Y-%m-%d"));

		if (strWhere.IsEmpty())
			strQuery.Format("select top %d * from customers where del_flag=0 and %s ", m_nDataPerPage, str);
		else
			strQuery.Format("select top %d * from customers where del_flag=0 and %s and %s", m_nDataPerPage, str, strWhere);
	}


	if(rs.Open(theApp.m_ADODatabase.GetActiveConnection(), strQuery))
	{
		m_ctlListEx.DeleteAllItems();
		int nIndex = 0;
		while(!rs.IsEof())
		{
			rs.GetFieldValue("customer_id",		nVIPID);
			rs.GetFieldValue("customer_name",	strVIPName);
			rs.GetFieldValue("card_id",			strCardID);
			rs.GetFieldValue("sex",				strVIPSex);
			rs.GetFieldValue("age",				nVIPAge);
			rs.GetFieldValue("cur_point",		nVIPCurPoints);
			rs.GetFieldValue("creat_time",		strCreatTime);			
			rs.GetFieldValue("update_time",		strUpdateTime);
			rs.SetFieldValue("user_name",		strCreateUser);


			int i = 1;
			char strTemp[4];
			_itoa_s(nIndex + 1, strTemp, sizeof(strTemp), 10);
			m_ctlListEx.InsertItem(nIndex, strTemp);	
			m_ctlListEx.SetItemText(nIndex, i++, strVIPName);	
			m_ctlListEx.SetItemText(nIndex, i++, strCardID);
			m_ctlListEx.SetItemText(nIndex, i++, strVIPSex);
			_itoa_s(nVIPAge, strTemp, sizeof(strTemp), 10);
			m_ctlListEx.SetItemText(nIndex, i++, strTemp);
			_itoa_s(nVIPCurPoints, strTemp, sizeof(strTemp), 10);
			m_ctlListEx.SetItemText(nIndex, i++, strTemp);
			m_ctlListEx.SetItemText(nIndex, i++, strCreatTime);
			m_ctlListEx.SetItemText(nIndex, i++, strUpdateTime);
			m_ctlListEx.SetItemData(nIndex, (DWORD_PTR)nVIPID);
			nIndex++;

// 			if (nVIPID > m_nFirst)
// 				m_nFirst = nVIPID;
// 
// 			if (nVIPID < m_nLast)
// 				m_nLast = nVIPID;
// 		
			if (m_nCurPage == 1)
				GetDlgItem(IDC_BUTTON_FIRST)->EnableWindow(FALSE);
			else
				GetDlgItem(IDC_BUTTON_FIRST)->EnableWindow(TRUE);
			
			if (m_nCurPage == m_nPageCount)
				GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(FALSE);
			else
				GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(TRUE);
			rs.MoveNext();
		}
	}
	else
		AfxMessageBox("更新列表失败!");
}


void CAcPtsRecorderView::OnUpdateData()
{
	POSITION pos =m_ctlListEx.GetFirstSelectedItemPosition();	
	if(pos)	
	{
		CDlgAddVIP dlg;
		CADORecordset rs;
		int nIndex  = m_ctlListEx.GetNextSelectedItem(pos);
		int nID = (int)m_ctlListEx.GetItemData(nIndex);
		CString strSql = "";
		strSql.Format("select * from customers where customer_id = %d", nID);

		if(rs.Open(theApp.m_ADODatabase.GetActiveConnection(), strSql))
		{
			if(!rs.IsEof())
			{
				rs.GetFieldValue("customer_id",		dlg.m_nVIPID);
				rs.GetFieldValue("customer_name",	dlg.m_strVIPName);
				rs.GetFieldValue("card_id",			dlg.m_strCardID);
				rs.GetFieldValue("sex",				dlg.m_strVIPSex);
				rs.GetFieldValue("age",				dlg.m_nVIPAge);
				rs.GetFieldValue("cur_point",		dlg.m_nVIPCurPoints);
				CString strCreatTime;
				rs.GetFieldValue("creat_time",		strCreatTime);	
				dlg.m_tmCreatTime.ParseDateTime(strCreatTime);
				dlg.m_bIsMod = TRUE;
				if (dlg.DoModal() == IDOK)
				{
					rs.Edit();
					rs.SetFieldValue("customer_name",	dlg.m_strVIPName);
					rs.SetFieldValue("card_id",			dlg.m_strCardID);
					rs.SetFieldValue("sex",				dlg.m_strVIPSex);
					rs.SetFieldValue("age",				dlg.m_nVIPAge);
					int npts = dlg.m_nVIPCurPoints + dlg.m_nVIPAddPoints;
					rs.SetFieldValue("cur_point",		npts);
					CString strNow;
					strNow.Format("%s", COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"));
					rs.SetFieldValue("update_time",		strNow);
					rs.Update();
					UpdateCustomerData();
				}
			}
		}
	}
}

void CAcPtsRecorderView::OnDelData()
{
	CADORecordset rs;
	CString strSQL; 
	strSQL.Format("select * from customers where customer_id = %d", m_ctlListEx.GetItemData(m_nCurSel));
	if (AfxMessageBox("确认删除该客户信息?", MB_YESNO) == IDYES)
	{
		if(rs.Open(theApp.m_ADODatabase.GetActiveConnection(), strSQL))
		{
			rs.Edit();
			rs.SetFieldValue("del_flag",	1);
			CString strNow;
			strNow.Format("%s", COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"));
			rs.SetFieldValue("update_time",		strNow);
			rs.Update();
			UpdateCustomerData();
		}
		else
			AfxMessageBox("删除失败!");
	}

}
void CAcPtsRecorderView::UpdateCustomerData()
{
	CString strWhere;
	if (m_nCurPage != 1)
	{
		if (m_strWhere.IsEmpty())
			strWhere.Format("customer_id <= %d order by customer_id desc", m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
		else
			strWhere.Format("%s and  customer_id<=%d   order by customer_id desc",m_strWhere, m_ayPgStartEnd.GetAt(m_nCurPage - 1).nStart);
		UpdateListData(strWhere);
	}
	else
	{	
		OnBnClickedButtonFirstpage();
	}
}